/* 工具类：
   1. 获取系统时间
   2. 判断⽂件是否存在
   3. 获取⽂件的所在⽬录路径
   4. 创建⽬录
*/
#ifndef __M_UTIL_H__
#define __M_UTIL_H__

#include <iostream>
#include <string>
#include <ctime>
#include <unistd.h>
#include <sys/stat.h>

namespace Mylog
{
    namespace util
    {
        class Date
        {
        public:
            static size_t now()
            {
                return (size_t)time(nullptr);
            }
        };

        class File
        {
        public:
            static bool exists(const std::string &filename)
            {
                // 系统调用，可移植性较差
                // if(access(filename.c_str(), F_OK) == -1) return false;
                // return true;

                struct stat st;
                if (stat(filename.c_str(), &st) < 0)
                    return false;
                return true;
            }

            static std::string path(const std::string &filename)
            {
                int pos = filename.find_last_of("/\\");
                if (pos == std::string::npos)
                    return ".";
                return filename.substr(0, pos);
            }

            static void createDirectory(const std::string &filename)
            {
                // .abc/def/gh
                size_t pos = 0, idx = 0;
                while (idx < filename.size())
                {
                    pos = filename.find_first_of("/\\", idx);
                    if (pos == std::string::npos)
                    {
                        mkdir(filename.c_str(), 0777);
                        break;
                    }

                    std::string parent_dir = filename.substr(0, pos + 1);
                    if (exists(parent_dir) == true)
                    {
                        idx = pos + 1;
                        continue;
                    }
                    mkdir(parent_dir.c_str(), 0777);
                    idx = pos + 1;
                }
            }
        };
    }
}

#endif